#pragma once

#include <vector>

enum {
    SF_WS_BORDER,
    SF_WS_CAPTION,
    SF_WS_CHILD,
    SF_WS_CHILDWINDOW,
    SF_WS_CLIPCHILDREN,
    SF_WS_CLIPSIBLINGS,
    SF_WS_DISABLED,
    SF_WS_DLGFRAME,
    SF_WS_GROUP,
    SF_WS_HSCROLL,
    SF_WS_ICONIC,
    SF_WS_MAXIMIZE,
    SF_WS_MAXIMIZEBOX,
    SF_WS_MINIMIZE,
    SF_WS_MINIMIZEBOX,
    SF_WS_OVERLAPPED,
    SF_WS_OVERLAPPEDWINDOW,
    SF_WS_POPUP,
    SF_WS_POPUPWINDOW,
    SF_WS_SIZEBOX,
    SF_WS_SYSMENU,
    SF_WS_TABSTOP,
    SF_WS_THICKFRAME,
    SF_WS_TILED,
    SF_WS_TILEDWINDOW,
    SF_WS_VISIBLE,
    SF_WS_VSCROLL,
    SF_WS_NUM,
};

enum {
    ESF_WS_EX_ACCEPTFILES,
    ESF_WS_EX_APPWINDOW,
    ESF_WS_EX_CLIENTEDGE,
    ESF_WS_EX_COMPOSITED,
    ESF_WS_EX_CONTEXTHELP,
    ESF_WS_EX_CONTROLPARENT,
    ESF_WS_EX_DLGMODALFRAME,
    ESF_WS_EX_LAYERED,
    ESF_WS_EX_LAYOUTRTL,
    ESF_WS_EX_LEFT,
    ESF_WS_EX_LEFTSCROLLBAR,
    ESF_WS_EX_LTRREADING,
    ESF_WS_EX_MDICHILD,
    ESF_WS_EX_NOACTIVATE,
    ESF_WS_EX_NOINHERITLAYOUT,
    ESF_WS_EX_NOPARENTNOTIFY,
    ESF_WS_EX_OVERLAPPEDWINDOW,
    ESF_WS_EX_PALETTEWINDOW,
    ESF_WS_EX_RIGHT,
    ESF_WS_EX_RIGHTSCROLLBAR,
    ESF_WS_EX_RTLREADING,
    ESF_WS_EX_STATICEDGE,
    ESF_WS_EX_TOOLWINDOW,
    ESF_WS_EX_TOPMOST,
    ESF_WS_EX_TRANSPARENT,
    ESF_WS_EX_WINDOWEDGE,
    ESF_WS_EX_NUM,
};

CString GetStyleName(int nStyleFlag);
std::vector<int> ParseStyle(LONG nStyle);
LONG BuildStyle(int *pSFList, int nStyleCount);
std::vector<CString> GetAllStyleNames();

CString GetExStyleName(int nStyleFlag);
std::vector<int> ParseExStyle(LONG nExStyle);
LONG BuildExStyle(int *pESFList, int nExStyleCount);
std::vector<CString> GetAllExStyleNames();

BOOL ClientToScreen(HWND hWnd, LPRECT lpRect);
BOOL ScreenToClient(HWND hWnd, LPRECT lpRect);

CString GetWindowClassName(HWND hWindow);

int MfcHotkeyModifierToSysHotkeyModifier(WORD nMfcModifier);
WORD SysHotkeyModifierToMfcHotkeyModifier(int nSysModifier);